package com.kirk.cts.ui.plugin;

import com.kirk.cts.ui.view.navigator.NavigatorItem;

import javax.swing.*;
import java.util.ArrayList;
import java.util.List;


/**
 * <p> AbstractUiPlugin.java </p>
 *
 * @version 1.0.0
 * @Author kirkliu
 * @Date 2020-09-01 23:30
 * @Description 界面插件抽象实现类
 */
public abstract class AbstractUiPlugin implements UiPlugin {


    @Override
    public final List<JMenu> getMenuBarList() {
        return populateMenuBarList();
    }

    /**
     * 组装插件菜单栏
     * <p>方法说明:</p>
     * 默认为空实现,子类可覆盖此方法
     */
    protected List<JMenu> populateMenuBarList() {
        return new ArrayList<JMenu>();
    }


    @Override
    public final List<Action> getToolBarList() {
        return populateToolBarList();
    }

    /**
     * 组装插件工具栏
     * <p>方法说明:</p>
     * 默认为空实现,子类可覆盖此方法
     */
    protected List<Action> populateToolBarList() {
        return new ArrayList<Action>();
    }

    @Override
    public final List<NavigatorItem> getNavigatorItemList() {
        return populateNavigatorItemList();
    }

    /**
     * 组装导航栏
     * <p>方法说明:</p>
     * 默认为空实现,子类可覆盖此方法
     */
    protected List<NavigatorItem> populateNavigatorItemList() {
        return new ArrayList<NavigatorItem>();
    }


    @Override
    public final int getPluginLevel() {
        return populatePluginLevel();
    }

    /**
     * 设置插件级别
     * <p>方法说明:</p>
     * 默认为100,值越小,排位越靠前,子类可覆盖此方法
     */
    protected int populatePluginLevel() {
        return 100;
    }


    @Override
    public int compareTo(UiPlugin o) {
        int level = getPluginLevel();
        if (level > o.getPluginLevel()) {
            return 1;
        } else if (level < o.getPluginLevel()) {
            return -1;
        }
        return 0;
    }

}
